{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e83c639c-610d-482e-ab2e-2e5292c8f4b2",
   "metadata": {},
   "source": [
    "## 神经网络\n",
    "人工神经网络是一种模仿生物神经网络学习模式的机器学习框架：可以将它们粗略地近似为人类在学习中的思维活动。生物神经网络具有相互连接的神经元，神经元的树突结构接收输入，并基于这些输入产生输出信号，通过轴突传输到另一个神经元。我们将尝试通过人工神经网络（ANN，简称神经网络）来模拟这个过程。神经网络是深度学习的基础，它属于机器学习范畴，是当今最令人兴奋的技术进步之一。在利用 Python 创建神经网络之前，让我们先从最基本形式——单个感知器（perceptron）开始。下面是感知器的介绍。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "42c0480f-b4de-4d4e-99fb-5a62f8bf1284",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from sklearn import tree\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve\n",
    "from sklearn.metrics import auc\n",
    "\n",
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = \"all\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "019e1928-0469-4529-82e5-917128127e6f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 149 entries, 0 to 148\n",
      "Data columns (total 5 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   5.1          149 non-null    float64\n",
      " 1   3.5          149 non-null    float64\n",
      " 2   1.4          149 non-null    float64\n",
      " 3   0.2          149 non-null    float64\n",
      " 4   Iris-setosa  149 non-null    object \n",
      "dtypes: float64(4), object(1)\n",
      "memory usage: 5.9+ KB\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>5.1</th>\n",
       "      <th>3.5</th>\n",
       "      <th>1.4</th>\n",
       "      <th>0.2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>149.000000</td>\n",
       "      <td>149.000000</td>\n",
       "      <td>149.000000</td>\n",
       "      <td>149.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>5.848322</td>\n",
       "      <td>3.051007</td>\n",
       "      <td>3.774497</td>\n",
       "      <td>1.205369</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.828594</td>\n",
       "      <td>0.433499</td>\n",
       "      <td>1.759651</td>\n",
       "      <td>0.761292</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>4.300000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>5.100000</td>\n",
       "      <td>2.800000</td>\n",
       "      <td>1.600000</td>\n",
       "      <td>0.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>5.800000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>4.400000</td>\n",
       "      <td>1.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.400000</td>\n",
       "      <td>3.300000</td>\n",
       "      <td>5.100000</td>\n",
       "      <td>1.800000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>7.900000</td>\n",
       "      <td>4.400000</td>\n",
       "      <td>6.900000</td>\n",
       "      <td>2.500000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              5.1         3.5         1.4         0.2\n",
       "count  149.000000  149.000000  149.000000  149.000000\n",
       "mean     5.848322    3.051007    3.774497    1.205369\n",
       "std      0.828594    0.433499    1.759651    0.761292\n",
       "min      4.300000    2.000000    1.000000    0.100000\n",
       "25%      5.100000    2.800000    1.600000    0.300000\n",
       "50%      5.800000    3.000000    4.400000    1.300000\n",
       "75%      6.400000    3.300000    5.100000    1.800000\n",
       "max      7.900000    4.400000    6.900000    2.500000"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "5.1            0\n",
       "3.5            0\n",
       "1.4            0\n",
       "0.2            0\n",
       "Iris-setosa    0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "0      False\n",
       "1      False\n",
       "2      False\n",
       "3      False\n",
       "4      False\n",
       "       ...  \n",
       "144    False\n",
       "145    False\n",
       "146    False\n",
       "147    False\n",
       "148    False\n",
       "Length: 149, dtype: bool"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd \n",
    "df = pd.read_csv('irisdata.txt')\n",
    "df.info() \n",
    "df.describe() \n",
    "df.isnull().sum() \n",
    "df.duplicated()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "id": "bf1c6931-42d4-46fa-9d5b-dc31bb14a497",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.1  3.5  1.4  0.2  Iris-setosa    \n",
      "4.9  3.1  1.5  0.1  Iris-setosa        3\n",
      "5.8  2.7  5.1  1.9  Iris-virginica     2\n",
      "6.2  3.4  5.4  2.3  Iris-virginica     1\n",
      "6.3  2.3  4.4  1.3  Iris-versicolor    1\n",
      "     2.5  4.9  1.5  Iris-versicolor    1\n",
      "                                      ..\n",
      "5.5  2.4  3.7  1.0  Iris-versicolor    1\n",
      "          3.8  1.1  Iris-versicolor    1\n",
      "     2.5  4.0  1.3  Iris-versicolor    1\n",
      "     2.6  4.4  1.2  Iris-versicolor    1\n",
      "7.9  3.8  6.4  2.0  Iris-virginica     1\n",
      "Name: count, Length: 146, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(df.value_counts())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "id": "fdb6a83c-de0e-458d-9628-1d5159af7d20",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>5.1</th>\n",
       "      <th>3.5</th>\n",
       "      <th>1.4</th>\n",
       "      <th>0.2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>4.9</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4.7</td>\n",
       "      <td>3.2</td>\n",
       "      <td>1.3</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>4.6</td>\n",
       "      <td>3.1</td>\n",
       "      <td>1.5</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>5.0</td>\n",
       "      <td>3.6</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5.4</td>\n",
       "      <td>3.9</td>\n",
       "      <td>1.7</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   5.1  3.5  1.4  0.2\n",
       "0  4.9  3.0  1.4  0.2\n",
       "1  4.7  3.2  1.3  0.2\n",
       "2  4.6  3.1  1.5  0.2\n",
       "3  5.0  3.6  1.4  0.2\n",
       "4  5.4  3.9  1.7  0.4"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 利用concat()函数把转换后的数据对象全部合并在一起变成新的数据对象，命名为trainData_X\n",
    "trainData_X = df.iloc[0:,:4]\n",
    "trainData_X.head()\n",
    "# 72 columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "id": "9c666dfa-687b-4c02-be6f-827c9ad05b86",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "target\n",
       "2    50\n",
       "0    50\n",
       "1    49\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['target'] = 0\n",
    "df.loc[(df.iloc[0:150,4] == 'Iris-setosa'), 'target'] = 1\n",
    "df.loc[(df.iloc[0:150,4] == 'Iris-versicolor'), 'target'] = 2\n",
    "trainData_y = df['target'] \n",
    "trainData_y.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "id": "ca874901-3556-42a1-a295-c96d4f2194af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "std = StandardScaler()\n",
    "X = std.fit_transform(trainData_X*1.0)\n",
    "import scipy\n",
    "from scipy.cluster import hierarchy\n",
    "dendro=hierarchy.dendrogram(hierarchy.linkage(X,method='ward'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "id": "8e06667f-0d57-4d5c-89f4-ed3396fe8008",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(trainData_X, trainData_y, test_size=0.3, random_state=4096)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "id": "1ffb7e57-74a3-40e9-b25d-4f09352156f0",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "id": "dac45c8b-e8f5-4bd5-bb53-8f13d594bacb",
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler = StandardScaler()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "id": "728282c1-c27b-49df-a608-acdd88b7846c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数据：\n",
      "      5.1  3.5  1.4  0.2\n",
      "116  7.7  3.8  6.7  2.2\n",
      "39   5.0  3.5  1.3  0.3\n",
      "58   5.2  2.7  3.9  1.4\n",
      "68   5.6  2.5  3.9  1.1\n",
      "8    4.9  3.1  1.5  0.1\n",
      "..   ...  ...  ...  ...\n",
      "90   6.1  3.0  4.6  1.4\n",
      "89   5.5  2.6  4.4  1.2\n",
      "40   4.5  2.3  1.3  0.3\n",
      "115  6.5  3.0  5.5  1.8\n",
      "109  6.5  3.2  5.1  2.0\n",
      "\n",
      "[104 rows x 4 columns]\n",
      "均值： [5.85288462 3.04615385 3.79326923 1.22211538]\n",
      "标准差： [0.80335316 0.42311189 1.73915676 0.76144558]\n",
      "标准化后的数据：\n",
      " StandardScaler()\n"
     ]
    }
   ],
   "source": [
    "X_scaled = scaler.fit(X_train)\n",
    "print(\"原始数据：\\n\", X_train)\n",
    "print(\"均值：\", scaler.mean_)\n",
    "print(\"标准差：\", scaler.scale_)\n",
    "print(\"标准化后的数据：\\n\", X_scaled)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "id": "864d8702-63fe-4299-9479-538c23117aa9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2.29925702,  1.78167094,  1.67134489,  1.28424754],\n",
       "       [-1.0616559 ,  1.07263863, -1.43360811, -1.21100629],\n",
       "       [-0.81269938, -0.81811421,  0.06136926,  0.23361435],\n",
       "       [-0.31478636, -1.29080242,  0.06136926, -0.1603731 ],\n",
       "       [-1.18613415,  0.12726221, -1.31860985, -1.47366458],\n",
       "       [ 0.18312667, -1.99983473,  0.69385969,  0.3649435 ],\n",
       "       [-1.31061241, -0.10908189, -1.37610898, -1.21100629],\n",
       "       [-1.0616559 , -1.76349063, -0.28362551, -0.29170224],\n",
       "       [ 0.05864841,  0.36360631,  0.57886143,  0.75893095],\n",
       "       [-0.1903081 ,  3.19973557, -1.31860985, -1.07967714],\n",
       "       [-0.31478636, -0.10908189,  0.40636404,  0.3649435 ],\n",
       "       [-0.1903081 , -1.05445831, -0.16862726, -0.29170224],\n",
       "       [-1.55956892,  0.36360631, -1.37610898, -1.34233544],\n",
       "       [ 1.42790923,  0.36360631,  0.5213623 ,  0.23361435],\n",
       "       [-1.18613415, -0.10908189, -1.37610898, -1.34233544],\n",
       "       [-0.06582985, -0.81811421,  0.75135882,  0.8902601 ],\n",
       "       [ 0.05864841, -0.10908189,  0.75135882,  0.75893095],\n",
       "       [ 0.43208318,  0.83629452,  0.92385621,  1.41557669],\n",
       "       [ 0.55656143, -1.76349063,  0.34886491,  0.1022852 ],\n",
       "       [ 0.9299962 , -0.345426  ,  0.46386317,  0.1022852 ],\n",
       "       [ 0.80551795, -0.5817701 ,  0.46386317,  0.3649435 ],\n",
       "       [ 0.55656143, -0.345426  ,  1.03885447,  0.75893095],\n",
       "       [-0.31478636, -0.5817701 ,  0.63636056,  1.02158925],\n",
       "       [ 1.30343097,  0.12726221,  0.75135882,  1.41557669],\n",
       "       [-0.81269938,  1.07263863, -1.31860985, -1.34233544],\n",
       "       [ 0.43208318, -1.99983473,  0.40636404,  0.3649435 ],\n",
       "       [ 0.30760492, -0.10908189,  0.63636056,  0.75893095],\n",
       "       [ 1.05447446,  0.59995042,  1.0963536 ,  1.15291839],\n",
       "       [-0.1903081 , -0.5817701 ,  0.17636752,  0.1022852 ],\n",
       "       [-0.31478636, -0.10908189,  0.17636752,  0.1022852 ],\n",
       "       [-0.06582985, -0.81811421,  0.75135882,  0.8902601 ],\n",
       "       [-0.43926462, -1.76349063,  0.11886839,  0.1022852 ],\n",
       "       [ 0.80551795, -0.10908189,  1.15385273,  1.28424754],\n",
       "       [ 1.92582225, -0.5817701 ,  1.32635012,  0.8902601 ],\n",
       "       [-1.0616559 ,  0.36360631, -1.49110724, -1.34233544],\n",
       "       [ 1.05447446, -1.29080242,  1.15385273,  0.75893095],\n",
       "       [-1.31061241, -0.10908189, -1.37610898, -1.47366458],\n",
       "       [-0.56374287,  0.83629452, -1.20361159, -1.34233544],\n",
       "       [ 0.55656143, -1.29080242,  0.63636056,  0.3649435 ],\n",
       "       [-0.43926462,  2.72704736, -1.37610898, -1.34233544],\n",
       "       [-0.68822113,  1.54532684, -1.31860985, -1.34233544],\n",
       "       [ 1.30343097,  0.36360631,  1.0963536 ,  1.41557669],\n",
       "       [-0.06582985,  2.25435915, -1.49110724, -1.34233544],\n",
       "       [-1.80852543, -0.345426  , -1.37610898, -1.34233544],\n",
       "       [-0.56374287,  0.83629452, -1.31860985, -1.07967714],\n",
       "       [-0.1903081 , -0.345426  ,  0.23386665,  0.1022852 ],\n",
       "       [-1.0616559 ,  1.30898273, -1.37610898, -1.34233544],\n",
       "       [-0.31478636, -0.345426  , -0.11112813,  0.1022852 ],\n",
       "       [-1.0616559 ,  0.83629452, -1.26111072, -1.07967714],\n",
       "       [-0.93717764,  0.83629452, -1.31860985, -1.34233544],\n",
       "       [ 1.30343097,  0.12726221,  0.92385621,  1.15291839],\n",
       "       [-0.06582985, -0.5817701 ,  0.75135882,  1.54690584],\n",
       "       [ 1.67686574,  1.30898273,  1.32635012,  1.67823499],\n",
       "       [ 1.05447446,  0.59995042,  1.0963536 ,  1.67823499],\n",
       "       [-1.0616559 ,  0.59995042, -1.37610898, -1.34233544],\n",
       "       [-1.18613415,  0.12726221, -1.31860985, -1.47366458],\n",
       "       [ 1.05447446, -0.10908189,  0.80885795,  1.41557669],\n",
       "       [ 0.18312667,  0.83629452,  0.40636404,  0.49627265],\n",
       "       [ 0.68103969,  0.36360631,  0.86635708,  1.41557669],\n",
       "       [-0.1903081 , -1.29080242,  0.69385969,  1.02158925],\n",
       "       [-1.80852543, -0.10908189, -1.43360811, -1.34233544],\n",
       "       [-1.31061241,  0.12726221, -1.26111072, -1.34233544],\n",
       "       [ 0.43208318, -0.5817701 ,  0.57886143,  0.75893095],\n",
       "       [ 1.80134399, -0.345426  ,  1.44134837,  0.75893095],\n",
       "       [ 1.05447446,  0.12726221,  0.5213623 ,  0.3649435 ],\n",
       "       [ 0.68103969,  0.36360631,  0.40636404,  0.3649435 ],\n",
       "       [-1.43509066,  0.36360631, -1.43360811, -1.34233544],\n",
       "       [-0.56374287, -0.10908189,  0.40636404,  0.3649435 ],\n",
       "       [ 0.55656143,  0.59995042,  1.26885099,  1.67823499],\n",
       "       [-0.93717764,  1.78167094, -1.31860985, -1.21100629],\n",
       "       [ 2.29925702, -0.10908189,  1.32635012,  1.41557669],\n",
       "       [ 0.68103969,  0.12726221,  0.98135534,  0.75893095],\n",
       "       [ 0.30760492, -1.05445831,  1.03885447,  0.23361435],\n",
       "       [-1.18613415, -1.29080242,  0.40636404,  0.6276018 ],\n",
       "       [-0.31478636, -0.81811421,  0.23386665,  0.1022852 ],\n",
       "       [-0.43926462,  1.07263863, -1.43360811, -1.34233544],\n",
       "       [ 0.43208318, -0.345426  ,  0.29136578,  0.1022852 ],\n",
       "       [ 1.17895271, -0.10908189,  0.98135534,  1.15291839],\n",
       "       [ 0.55656143, -1.29080242,  0.69385969,  0.8902601 ],\n",
       "       [ 0.30760492, -0.5817701 ,  0.5213623 , -0.02904395],\n",
       "       [ 1.05447446,  0.12726221,  0.34886491,  0.23361435],\n",
       "       [-1.80852543,  0.36360631, -1.43360811, -1.34233544],\n",
       "       [-1.55956892,  0.12726221, -1.31860985, -1.34233544],\n",
       "       [ 1.67686574,  0.36360631,  1.26885099,  0.75893095],\n",
       "       [ 0.9299962 , -0.10908189,  0.34886491,  0.23361435],\n",
       "       [-0.93717764,  0.59995042, -1.20361159, -0.94834799],\n",
       "       [-0.93717764,  1.54532684, -1.31860985, -1.07967714],\n",
       "       [ 0.18312667, -1.99983473,  0.11886839, -0.29170224],\n",
       "       [-0.93717764,  1.78167094, -1.26111072, -1.34233544],\n",
       "       [ 1.17895271, -0.5817701 ,  0.57886143,  0.23361435],\n",
       "       [-0.06582985, -0.81811421,  0.17636752, -0.29170224],\n",
       "       [-1.0616559 ,  1.07263863, -1.26111072, -0.81701884],\n",
       "       [ 1.17895271,  0.36360631,  1.21135186,  1.41557669],\n",
       "       [-0.1903081 ,  1.78167094, -1.20361159, -1.21100629],\n",
       "       [ 0.30760492, -0.345426  ,  0.5213623 ,  0.23361435],\n",
       "       [ 0.30760492, -0.5817701 ,  0.11886839,  0.1022852 ],\n",
       "       [ 2.29925702, -0.5817701 ,  1.67134489,  1.02158925],\n",
       "       [-1.31061241,  0.83629452, -1.08861333, -1.34233544],\n",
       "       [-0.43926462, -1.29080242,  0.11886839,  0.1022852 ],\n",
       "       [ 0.30760492, -0.10908189,  0.46386317,  0.23361435],\n",
       "       [-0.43926462, -1.05445831,  0.34886491, -0.02904395],\n",
       "       [-1.68404718, -1.76349063, -1.43360811, -1.21100629],\n",
       "       [ 0.80551795, -0.10908189,  0.98135534,  0.75893095],\n",
       "       [ 0.80551795,  0.36360631,  0.75135882,  1.02158925]])"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train = scaler.transform(X_train)\n",
    "X_test = scaler.transform(X_test)\n",
    "X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "id": "3a182ae5-0341-4319-8baf-fe33b74a2935",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neural_network import MLPClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "id": "8ef4c095-680d-493c-aa9d-f83fd3161d88",
   "metadata": {},
   "outputs": [],
   "source": [
    "mlp = MLPClassifier(hidden_layer_sizes=(4,3),max_iter=500)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "id": "52dd98e7-38f5-4281-ac5b-de8a75cf7a34",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:691: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (500) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-15 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-15 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-15 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-15 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-15 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-15 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-15 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-15 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-15 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-15 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-15 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-15 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-15 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-15 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-15 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-15 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-15 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-15 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-15 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-15\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MLPClassifier(hidden_layer_sizes=(4, 3), max_iter=500)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-15\" type=\"checkbox\" checked><label for=\"sk-estimator-id-15\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;MLPClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.neural_network.MLPClassifier.html\">?<span>Documentation for MLPClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>MLPClassifier(hidden_layer_sizes=(4, 3), max_iter=500)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "MLPClassifier(hidden_layer_sizes=(4, 3), max_iter=500)"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mlp.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "id": "e298160a-9056-457a-a768-14f2c8136786",
   "metadata": {},
   "outputs": [],
   "source": [
    "predictions = mlp.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "id": "5531f08d-8edf-4256-8da5-bacaf929461f",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import classification_report,confusion_matrix, ConfusionMatrixDisplay\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "id": "ef00fc29-f845-4e1f-8c0a-57c4b5fdaf69",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[14  0  0]\n",
      " [ 0 15  0]\n",
      " [ 7  0  9]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x1f766c37320>"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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NGbMmKD3+/btq7feeuuUMWzbtk2VlZW68sorax13aWmpioqKNGrUKN1+++2B/V6vN9D/vm3bNnXv3l3169cPiiNUb731lqZNm6bPPvtMZWVl8nq9qqioUHl5uRo0aCBJSkpKUu/evQPndOzYUY0aNdK2bdt0wQUXaMOGDfroo4+CKnCfz6eKigodPXo0KEYA1iORI271799fc+fOVXJysrKzs2sMZjuRqE7w+/1q3ry51qxZU+NadX0EKzU1NeRz/H6/pOPN6xdeeGHQe4mJiZIkwzDqFM8P7d69W9dee63GjBmjJ554QhkZGXrnnXc0atSooC4I6fjjYyc7sc/v9+uxxx7T9ddfX+OYlJQU03ECODMSOeJWgwYNdO6559b6+J49e6q4uFhJSUlq3br1KY/p1KmT1q9fr1tvvTWwb/369ae9Zrt27ZSamqp///vfGj16dI3369WrJ+l4BXtCVlaWWrRooS+//FLDhw8/5XU7d+6s5557TseOHQv8sXCmOE6loKBAXq9X//3f/62EhOPDZV588cUax3m9XhUUFOiCCy6QJG3fvl0HDx5Ux44dJR3/97Z9+/aQ/l0DsA6JHPjeVVddpb59+2rIkCGaPn26OnTooL179+q1117TkCFD1Lt3b917770aMWKEevfurUsvvVTPP/+8tm7dqrZt257ymikpKZo4caIeeOAB1atXT5dccolKS0u1detWjRo1SpmZmUpNTdXKlSt19tlnKyUlRenp6ZoyZYrGjx8vj8ej3NxcVVZWqqCgQAcOHFBeXp6GDRumSZMmadSoUXr44Ye1a9cu/eEPfwjp855zzjnyer165plnNGjQIL377ruaN29ejeOSk5N1zz33aNasWUpOTtbdd9+tiy66KJDYH330UQ0cOFA5OTm64YYblJCQoC1btuiTTz7R7373u9C/CAAhYdQ68D2Xy6XXXntNl19+uX7961+rffv2Gjp0qHbt2hUYZX7TTTfp0Ucf1cSJE9WrVy/t3r1bd9111xmv+8gjj+i+++7To48+qk6dOummm25SSUmJpOP9z7NmzdL8+fOVnZ2twYMHS5JGjx6tP/7xj1q0aJG6deumK664QosWLQo8rtawYUP985//1GeffaYePXpo0qRJmj59ekif9/zzz9eMGTM0ffp0de3aVc8//7zy8/NrHFe/fn1NnDhRw4YNU9++fZWamqq//e1vgfevueYavfLKK1q9erX69Omjiy66SDNmzFCrVq1CigdA3bgMKzrbAABAVFCRAwBgYyRyAABsjEQOAICNkcgBALAxEjkAADZGIgcAwMZI5AAA2BiJHAAAGyORAwBgYyRyAABsjEQOAICN/X+bc6LlehlUvgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(confusion_matrix(y_test,predictions))\n",
    "disp = ConfusionMatrixDisplay(confusion_matrix=confusion_matrix(y_test,predictions), display_labels=['0','1','2'])\n",
    "disp.plot()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "id": "48a8a767-0f96-4b23-9e35-ebc9cb8707b8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-16 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-16 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-16 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-16 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-16 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-16 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-16 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-16 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-16 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-16 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-16 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-16 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-16 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-16 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-16 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-16 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-16 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-16 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-16 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-16\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KNeighborsClassifier()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-16\" type=\"checkbox\" checked><label for=\"sk-estimator-id-16\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KNeighborsClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.neighbors.KNeighborsClassifier.html\">?<span>Documentation for KNeighborsClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KNeighborsClassifier()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KNeighborsClassifier()"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           1       0.95      1.00      0.97        18\n",
      "           2       0.86      0.75      0.80        24\n",
      "           3       0.57      0.67      0.62        12\n",
      "\n",
      "    accuracy                           0.81        54\n",
      "   macro avg       0.79      0.81      0.80        54\n",
      "weighted avg       0.82      0.81      0.82        54\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn import datasets\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn import datasets\n",
    "# 导入sklearn自带的iris数据集\n",
    "\n",
    "datas = pd.read_csv(\"wine.txt\")          #读取文件\n",
    "y = datas.iloc[:,0]\n",
    "X = datas.iloc[:,1:] \n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=1024) #拆分数据集\n",
    "\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "# 实例化模型并训练\n",
    "model = KNeighborsClassifier()\n",
    "model.fit(X_train,y_train)\n",
    "\n",
    "# 方法2：使用sklearn.metrics下的classification_report方法\n",
    "# 先对测试集进行预测\n",
    "y_pred = model.predict(X_test) #预测类别标签\n",
    "y_pred_prob = model.predict_proba(X_test) #预测类别概率\n",
    "\n",
    "# 分类评估报告classification_report\n",
    "from sklearn.metrics import classification_report\n",
    "print(classification_report(y_test,y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21a13e93-67db-41de-8df9-e546b3e161cc",
   "metadata": {},
   "source": [
    "15 15 40 30 "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6f78688-cfd5-43fd-a0ff-18f308a1a5c1",
   "metadata": {},
   "source": [
    "机器学习的基础概念"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d0b8a89-d577-44f6-97e2-3ad376c44ba3",
   "metadata": {},
   "source": [
    "不考公式推导"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16d62c7e-fbdf-49e8-a53f-1524fd40440a",
   "metadata": {},
   "source": [
    "SKlearn的四个基础功能：\n",
    "回归，：linear Reg， SVM（支持向量机），DT（决策树），RF（随机森林），MLP（NN神经网络）\n",
    "分类：logical reg ，SVM\n",
    "降维：PCA主成分分析法，\n",
    "聚类：kmeans,K近邻"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5d2bbdc-4787-46de-a29c-c7c7c5103011",
   "metadata": {},
   "source": [
    "## 每个方法出现在教材的哪一页？"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b5e7680-3146-4535-918a-d3df1b7e3b11",
   "metadata": {},
   "source": [
    "## 标准四部曲"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb160cb2-58d9-4e1f-9e35-41da565e22bc",
   "metadata": {},
   "source": [
    "数据预处理：打开文件，读取数据，get_dummy ,StadardScale，归一，标准化，读热，r"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1a1d156-6966-4ae0-a878-2a58769606aa",
   "metadata": {},
   "source": [
    "构建数据集："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "af9996ad-8956-4e63-956c-72d9207c39ec",
   "metadata": {},
   "source": [
    "选择所需要的模型，创建模型的实例"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd35c246-b804-479e-8802-03939bc5ec82",
   "metadata": {},
   "source": [
    "拟合（fit）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4eed8e6c-35fa-4737-93bd-522f7d8e6bc1",
   "metadata": {},
   "source": [
    "预测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc0d594c-e158-426e-b7b7-be34cf13b09b",
   "metadata": {},
   "source": [
    "评价"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "df6ec4b0-786b-47b3-b657-dae6d00fa106",
   "metadata": {},
   "source": [
    "## 用K-means方法对wine聚类，三聚类，画中心"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "b6457186-b055-412c-80ed-4adbf09f8161",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>14.23</td>\n",
       "      <td>1.71</td>\n",
       "      <td>2.43</td>\n",
       "      <td>15.6</td>\n",
       "      <td>127</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.06</td>\n",
       "      <td>0.28</td>\n",
       "      <td>2.29</td>\n",
       "      <td>5.64</td>\n",
       "      <td>1.04</td>\n",
       "      <td>3.92</td>\n",
       "      <td>1065</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>13.20</td>\n",
       "      <td>1.78</td>\n",
       "      <td>2.14</td>\n",
       "      <td>11.2</td>\n",
       "      <td>100</td>\n",
       "      <td>2.65</td>\n",
       "      <td>2.76</td>\n",
       "      <td>0.26</td>\n",
       "      <td>1.28</td>\n",
       "      <td>4.38</td>\n",
       "      <td>1.05</td>\n",
       "      <td>3.40</td>\n",
       "      <td>1050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>13.16</td>\n",
       "      <td>2.36</td>\n",
       "      <td>2.67</td>\n",
       "      <td>18.6</td>\n",
       "      <td>101</td>\n",
       "      <td>2.80</td>\n",
       "      <td>3.24</td>\n",
       "      <td>0.30</td>\n",
       "      <td>2.81</td>\n",
       "      <td>5.68</td>\n",
       "      <td>1.03</td>\n",
       "      <td>3.17</td>\n",
       "      <td>1185</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>14.37</td>\n",
       "      <td>1.95</td>\n",
       "      <td>2.50</td>\n",
       "      <td>16.8</td>\n",
       "      <td>113</td>\n",
       "      <td>3.85</td>\n",
       "      <td>3.49</td>\n",
       "      <td>0.24</td>\n",
       "      <td>2.18</td>\n",
       "      <td>7.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>3.45</td>\n",
       "      <td>1480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>13.24</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.87</td>\n",
       "      <td>21.0</td>\n",
       "      <td>118</td>\n",
       "      <td>2.80</td>\n",
       "      <td>2.69</td>\n",
       "      <td>0.39</td>\n",
       "      <td>1.82</td>\n",
       "      <td>4.32</td>\n",
       "      <td>1.04</td>\n",
       "      <td>2.93</td>\n",
       "      <td>735</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>173</th>\n",
       "      <td>3</td>\n",
       "      <td>13.71</td>\n",
       "      <td>5.65</td>\n",
       "      <td>2.45</td>\n",
       "      <td>20.5</td>\n",
       "      <td>95</td>\n",
       "      <td>1.68</td>\n",
       "      <td>0.61</td>\n",
       "      <td>0.52</td>\n",
       "      <td>1.06</td>\n",
       "      <td>7.70</td>\n",
       "      <td>0.64</td>\n",
       "      <td>1.74</td>\n",
       "      <td>740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>3</td>\n",
       "      <td>13.40</td>\n",
       "      <td>3.91</td>\n",
       "      <td>2.48</td>\n",
       "      <td>23.0</td>\n",
       "      <td>102</td>\n",
       "      <td>1.80</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.41</td>\n",
       "      <td>7.30</td>\n",
       "      <td>0.70</td>\n",
       "      <td>1.56</td>\n",
       "      <td>750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>175</th>\n",
       "      <td>3</td>\n",
       "      <td>13.27</td>\n",
       "      <td>4.28</td>\n",
       "      <td>2.26</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120</td>\n",
       "      <td>1.59</td>\n",
       "      <td>0.69</td>\n",
       "      <td>0.43</td>\n",
       "      <td>1.35</td>\n",
       "      <td>10.20</td>\n",
       "      <td>0.59</td>\n",
       "      <td>1.56</td>\n",
       "      <td>835</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>176</th>\n",
       "      <td>3</td>\n",
       "      <td>13.17</td>\n",
       "      <td>2.59</td>\n",
       "      <td>2.37</td>\n",
       "      <td>20.0</td>\n",
       "      <td>120</td>\n",
       "      <td>1.65</td>\n",
       "      <td>0.68</td>\n",
       "      <td>0.53</td>\n",
       "      <td>1.46</td>\n",
       "      <td>9.30</td>\n",
       "      <td>0.60</td>\n",
       "      <td>1.62</td>\n",
       "      <td>840</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>3</td>\n",
       "      <td>14.13</td>\n",
       "      <td>4.10</td>\n",
       "      <td>2.74</td>\n",
       "      <td>24.5</td>\n",
       "      <td>96</td>\n",
       "      <td>2.05</td>\n",
       "      <td>0.76</td>\n",
       "      <td>0.56</td>\n",
       "      <td>1.35</td>\n",
       "      <td>9.20</td>\n",
       "      <td>0.61</td>\n",
       "      <td>1.60</td>\n",
       "      <td>560</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>178 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     0      1     2     3     4    5     6     7     8     9      10    11  \\\n",
       "0     1  14.23  1.71  2.43  15.6  127  2.80  3.06  0.28  2.29   5.64  1.04   \n",
       "1     1  13.20  1.78  2.14  11.2  100  2.65  2.76  0.26  1.28   4.38  1.05   \n",
       "2     1  13.16  2.36  2.67  18.6  101  2.80  3.24  0.30  2.81   5.68  1.03   \n",
       "3     1  14.37  1.95  2.50  16.8  113  3.85  3.49  0.24  2.18   7.80  0.86   \n",
       "4     1  13.24  2.59  2.87  21.0  118  2.80  2.69  0.39  1.82   4.32  1.04   \n",
       "..   ..    ...   ...   ...   ...  ...   ...   ...   ...   ...    ...   ...   \n",
       "173   3  13.71  5.65  2.45  20.5   95  1.68  0.61  0.52  1.06   7.70  0.64   \n",
       "174   3  13.40  3.91  2.48  23.0  102  1.80  0.75  0.43  1.41   7.30  0.70   \n",
       "175   3  13.27  4.28  2.26  20.0  120  1.59  0.69  0.43  1.35  10.20  0.59   \n",
       "176   3  13.17  2.59  2.37  20.0  120  1.65  0.68  0.53  1.46   9.30  0.60   \n",
       "177   3  14.13  4.10  2.74  24.5   96  2.05  0.76  0.56  1.35   9.20  0.61   \n",
       "\n",
       "       12    13  \n",
       "0    3.92  1065  \n",
       "1    3.40  1050  \n",
       "2    3.17  1185  \n",
       "3    3.45  1480  \n",
       "4    2.93   735  \n",
       "..    ...   ...  \n",
       "173  1.74   740  \n",
       "174  1.56   750  \n",
       "175  1.56   835  \n",
       "176  1.62   840  \n",
       "177  1.60   560  \n",
       "\n",
       "[178 rows x 14 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd \n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.decomposition import PCA\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "%matplotlib inline\n",
    "\n",
    "df = pd.read_csv('wine.txt', delimiter=',',header=None)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "8d725e2f-c315-42d8-bf9b-229e745316ed",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_data=df.iloc[:,1:] #提取出除了第一列的所有列\n",
    "y_label=df.iloc[:,0] #提取第一列\n",
    "X_ori=df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "21448fa6-3e8e-404a-baee-197e139b5429",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "std = StandardScaler()\n",
    "X = std.fit_transform(X_ori*1.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "a263b952-4c70-4f11-b137-d08b0d491918",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 3.31675081, -1.44346263],\n",
       "       [ 2.20946492,  0.33339289],\n",
       "       [ 2.51674015, -1.0311513 ],\n",
       "       [ 3.75706561, -2.75637191],\n",
       "       [ 1.00890849, -0.86983082],\n",
       "       [ 3.05025392, -2.12240111],\n",
       "       [ 2.44908967, -1.17485013],\n",
       "       [ 2.05943687, -1.60896307],\n",
       "       [ 2.5108743 , -0.91807096],\n",
       "       [ 2.75362819, -0.78943767],\n",
       "       [ 3.47973668, -1.30233324],\n",
       "       [ 1.7547529 , -0.61197723],\n",
       "       [ 2.11346234, -0.67570634],\n",
       "       [ 3.45815682, -1.13062988],\n",
       "       [ 4.31278391, -2.09597558],\n",
       "       [ 2.3051882 , -1.66255173],\n",
       "       [ 2.17195527, -2.32730534],\n",
       "       [ 1.89897118, -1.63136888],\n",
       "       [ 3.54198508, -2.51834367],\n",
       "       [ 2.0845222 , -1.06113799],\n",
       "       [ 3.12440254, -0.78689711],\n",
       "       [ 1.08657007, -0.24174355],\n",
       "       [ 2.53522408,  0.09184062],\n",
       "       [ 1.64498834,  0.51627893],\n",
       "       [ 1.76157587,  0.31714893],\n",
       "       [ 0.9900791 , -0.94066734],\n",
       "       [ 1.77527763, -0.68617513],\n",
       "       [ 1.23542396,  0.08980704],\n",
       "       [ 2.18840633, -0.68956962],\n",
       "       [ 2.25610898, -0.19146194],\n",
       "       [ 2.50022003, -1.24083383],\n",
       "       [ 2.67741105, -1.47187365],\n",
       "       [ 1.62857912, -0.05270445],\n",
       "       [ 1.90269086, -1.63306043],\n",
       "       [ 1.41038853, -0.69793432],\n",
       "       [ 1.90382623, -0.17671095],\n",
       "       [ 1.38486223, -0.65863985],\n",
       "       [ 1.12220741, -0.11410976],\n",
       "       [ 1.5021945 ,  0.76943201],\n",
       "       [ 2.52980109, -1.80300198],\n",
       "       [ 2.58809543, -0.7796163 ],\n",
       "       [ 0.66848199, -0.16996094],\n",
       "       [ 3.07080699, -1.15591896],\n",
       "       [ 0.46220914, -0.33074213],\n",
       "       [ 2.10135193,  0.07100892],\n",
       "       [ 1.13616618, -1.77710739],\n",
       "       [ 2.72660096, -1.19133469],\n",
       "       [ 2.82133927, -0.6462586 ],\n",
       "       [ 2.00985085, -1.24702946],\n",
       "       [ 2.7074913 , -1.75196741],\n",
       "       [ 3.21491747, -0.16699199],\n",
       "       [ 2.85895983, -0.7452788 ],\n",
       "       [ 3.50560436, -1.61273386],\n",
       "       [ 2.22479138, -1.875168  ],\n",
       "       [ 2.14698782, -1.01675154],\n",
       "       [ 2.46932948, -1.32900831],\n",
       "       [ 2.74151791, -1.43654878],\n",
       "       [ 2.17374092, -1.21219984],\n",
       "       [ 3.13938015, -1.73157912],\n",
       "       [-0.92858197,  3.07348616],\n",
       "       [-1.54248014,  1.38144351],\n",
       "       [-1.83624976,  0.82998412],\n",
       "       [ 0.03060683,  1.26278614],\n",
       "       [ 2.05026161,  1.9250326 ],\n",
       "       [-0.60968083,  1.90805881],\n",
       "       [ 0.90022784,  0.76391147],\n",
       "       [ 2.24850719,  1.88459248],\n",
       "       [ 0.18338403,  2.42714611],\n",
       "       [-0.81280503,  0.22051399],\n",
       "       [ 1.9756205 ,  1.40328323],\n",
       "       [-1.57221622,  0.88498314],\n",
       "       [ 1.65768181,  0.9567122 ],\n",
       "       [-0.72537239,  1.0636454 ],\n",
       "       [ 2.56222717, -0.26019855],\n",
       "       [ 1.83256757,  1.2878782 ],\n",
       "       [-0.8679929 ,  2.44410119],\n",
       "       [ 0.3700144 ,  2.15390698],\n",
       "       [-1.45737704,  1.38335177],\n",
       "       [ 1.26293085,  0.77084953],\n",
       "       [ 0.37615037,  1.0270434 ],\n",
       "       [ 0.7620639 ,  3.37505381],\n",
       "       [ 1.03457797,  1.45070974],\n",
       "       [-0.49487676,  2.38124353],\n",
       "       [-2.53897708,  0.08744336],\n",
       "       [ 0.83532015,  1.47367055],\n",
       "       [ 0.78790461,  2.02662652],\n",
       "       [-0.80683216,  2.23383039],\n",
       "       [-0.55804262,  2.37298543],\n",
       "       [-1.11511104,  1.80224719],\n",
       "       [-0.55572283,  2.65754004],\n",
       "       [-1.34928528,  2.11800147],\n",
       "       [-1.56448261,  1.85221452],\n",
       "       [-1.93255561,  1.55949546],\n",
       "       [ 0.74666594,  2.31293171],\n",
       "       [ 0.95745536,  2.22352843],\n",
       "       [ 2.54386518, -0.16927402],\n",
       "       [-0.54395259,  0.36892655],\n",
       "       [ 1.03104975,  2.56556935],\n",
       "       [ 2.25190942,  1.43274138],\n",
       "       [ 1.41021602,  2.16619177],\n",
       "       [ 0.79771979,  2.3769488 ],\n",
       "       [-0.54953173,  2.29312864],\n",
       "       [-0.16117374,  1.16448332],\n",
       "       [-0.65979494,  2.67996119],\n",
       "       [ 0.39235441,  2.09873171],\n",
       "       [-1.77249908,  1.71728847],\n",
       "       [-0.36626736,  2.1693533 ],\n",
       "       [-1.62067257,  1.35558339],\n",
       "       [ 0.08253578,  2.30623459],\n",
       "       [ 1.57827507,  1.46203429],\n",
       "       [ 1.42056925,  1.41820664],\n",
       "       [-0.27870275,  1.93056809],\n",
       "       [-1.30314497,  0.76317231],\n",
       "       [-0.45707187,  2.26941561],\n",
       "       [-0.49418585,  1.93904505],\n",
       "       [ 0.48207441,  3.87178385],\n",
       "       [-0.25288888,  2.82149237],\n",
       "       [-0.10722764,  1.92892204],\n",
       "       [-2.4330126 ,  1.25714104],\n",
       "       [-0.55108954,  2.22216155],\n",
       "       [ 0.73962193,  1.40895667],\n",
       "       [ 1.33632173, -0.25333693],\n",
       "       [-1.177087  ,  0.66396684],\n",
       "       [-0.46233501,  0.61828818],\n",
       "       [ 0.97847408,  1.4455705 ],\n",
       "       [-0.09680973,  2.10999799],\n",
       "       [ 0.03848715,  1.26676211],\n",
       "       [-1.5971585 ,  1.20814357],\n",
       "       [-0.47956492,  1.93884066],\n",
       "       [-1.79283347,  1.1502881 ],\n",
       "       [-1.32710166, -0.17038923],\n",
       "       [-2.38450083, -0.37458261],\n",
       "       [-2.9369401 , -0.26386183],\n",
       "       [-2.14681113, -0.36825495],\n",
       "       [-2.36986949,  0.45963481],\n",
       "       [-3.06384157, -0.35341284],\n",
       "       [-3.91575378, -0.15458252],\n",
       "       [-3.93646339, -0.65968723],\n",
       "       [-3.09427612, -0.34884276],\n",
       "       [-2.37447163, -0.29198035],\n",
       "       [-2.77881295, -0.28680487],\n",
       "       [-2.28656128, -0.37250784],\n",
       "       [-2.98563349, -0.48921791],\n",
       "       [-2.3751947 , -0.48233372],\n",
       "       [-2.20986553, -1.1600525 ],\n",
       "       [-2.625621  , -0.56316076],\n",
       "       [-4.28063878, -0.64967096],\n",
       "       [-3.58264137, -1.27270275],\n",
       "       [-2.80706372, -1.57053379],\n",
       "       [-2.89965933, -2.04105701],\n",
       "       [-2.32073698, -2.35636608],\n",
       "       [-2.54983095, -2.04528309],\n",
       "       [-1.81254128, -1.52764595],\n",
       "       [-2.76014464, -2.13893235],\n",
       "       [-2.7371505 , -0.40988627],\n",
       "       [-3.60486887, -1.80238422],\n",
       "       [-2.889826  , -1.92521861],\n",
       "       [-3.39215608, -1.31187639],\n",
       "       [-1.0481819 , -3.51508969],\n",
       "       [-1.60991228, -2.40663816],\n",
       "       [-3.14313097, -0.73816104],\n",
       "       [-2.2401569 , -1.17546529],\n",
       "       [-2.84767378, -0.55604397],\n",
       "       [-2.59749706, -0.69796554],\n",
       "       [-2.94929937, -1.55530896],\n",
       "       [-3.53003227, -0.8825268 ],\n",
       "       [-2.40611054, -2.59235618],\n",
       "       [-2.92908473, -1.27444695],\n",
       "       [-2.18141278, -2.07753731],\n",
       "       [-2.38092779, -2.58866743],\n",
       "       [-3.21161722,  0.2512491 ],\n",
       "       [-3.67791872, -0.84774784],\n",
       "       [-2.4655558 , -2.1937983 ],\n",
       "       [-3.37052415, -2.21628914],\n",
       "       [-2.60195585, -1.75722935],\n",
       "       [-2.67783946, -2.76089913],\n",
       "       [-2.38701709, -2.29734668],\n",
       "       [-3.20875816, -2.76891957]])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = StandardScaler().fit_transform(X_data)\n",
    "pca = PCA(n_components=2)\n",
    "principalComponents = pca.fit_transform(x)\n",
    "principalDf = pd.DataFrame(data = principalComponents\n",
    "             , columns = ['principal component 1', 'principal component 2'])\n",
    "principalComponents\n",
    "X = principalComponents"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "8ee56d82-adf3-4888-917c-91fe6fb81be7",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-42 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-42 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-42 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-42 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-42 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-42 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-42 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-42 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-42 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-42 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-42 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-42 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-42 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-42 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-42 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-42 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-42 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-42 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-42 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-42\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-42\" type=\"checkbox\" checked><label for=\"sk-estimator-id-42\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=1)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=1)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-43 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-43 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-43 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-43 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-43 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-43 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-43 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-43 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-43 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-43 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-43 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-43 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-43 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-43 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-43 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-43 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-43 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-43 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-43 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-43\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=2)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-43\" type=\"checkbox\" checked><label for=\"sk-estimator-id-43\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=2)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=2)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-44 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-44 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-44 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-44 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-44 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-44 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-44 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-44 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-44 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-44 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-44 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-44 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-44 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-44 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-44 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-44 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-44 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-44 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-44 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-44\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=3)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-44\" type=\"checkbox\" checked><label for=\"sk-estimator-id-44\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=3)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=3)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-45 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-45 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-45 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-45 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-45 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-45 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-45 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-45 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-45 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-45 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-45 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-45 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-45 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-45 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-45 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-45 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-45 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-45 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-45 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-45\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=4)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-45\" type=\"checkbox\" checked><label for=\"sk-estimator-id-45\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=4)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=4)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-46 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-46 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-46 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-46 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-46 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-46 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-46 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-46 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-46 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-46 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-46 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-46 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-46 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-46 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-46 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-46 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-46 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-46 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-46 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-46\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=5)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-46\" type=\"checkbox\" checked><label for=\"sk-estimator-id-46\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=5)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=5)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-47 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-47 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-47 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-47 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-47 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-47 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-47 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-47 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-47 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-47 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-47 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-47 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-47 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-47 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-47 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-47 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-47 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-47 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-47 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-47\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=6)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-47\" type=\"checkbox\" checked><label for=\"sk-estimator-id-47\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=6)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=6)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-48 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-48 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-48 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-48 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-48 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-48 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-48 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-48 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-48 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-48 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-48 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-48 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-48 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-48 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-48 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-48 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-48 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-48 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-48 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-48\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=7)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-48\" type=\"checkbox\" checked><label for=\"sk-estimator-id-48\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=7)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=7)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-49 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-49 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-49 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-49 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-49 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-49 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-49 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-49 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-49 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-49 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-49 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-49 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-49 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-49 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-49 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-49 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-49 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-49 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-49 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-49\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-49\" type=\"checkbox\" checked><label for=\"sk-estimator-id-49\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans()"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-50 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-50 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-50 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-50 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-50 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-50 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-50 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-50 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-50 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-50 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-50 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-50 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-50 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-50 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-50 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-50 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-50 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-50 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-50 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-50\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=9)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-50\" type=\"checkbox\" checked><label for=\"sk-estimator-id-50\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=9)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=9)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1646f229730>]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Elbow Method')"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'No. of cluster')"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'wcss: sum of dist. of sample to their closest cluster center')"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Fi9ejOXLlwOAds7QnSNYrq6uaNq0KZKSkuDr66vzqpyETUTGwzlERGR0wcHBGD16NL766iud9smTJ6NLly6YNWsWnn32WcTFxWHp0qU6T1aFhoZi2LBheOedd6o9tz7n0MeMGTMQGhqKli1bYuTIkSgvL8f27dsxderUKn0tLS3RrVs3zJ07F97e3rh58yY++ugjnT6ffPIJOnXqhDZt2qCkpAR//PEHAgICAAAuLi6wtLREVFQUmjVrBgsLCyiVSsycORMTJkyAnZ0dBg0ahJKSEhw5cgTZ2dmYNGmSqOshInE4QkREtWLWrFlVbmV17NgRmzZtwoYNGxAUFIRPPvkEn332mc6E6kuXLuHmzZv3PK8+59BH37598csvv2Dbtm1o3749+vfvj4MHD96z/8qVK1FWVobOnTtj4sSJmD17ts5xMzMzTJ8+HW3btkXv3r2hUCiwYcMGAICJiQmWLFmC7777Dh4eHnjiiScAAK+++iq+//57rF69GsHBwejTpw9Wr17NESKiWiATanKznYiIiKgB4QgRERERNXosiIiIiKjRY0FEREREjR4LIiIiImr0WBARERFRo8eCiIiIiBo9FkRERETU6LEgIiIiokaPBRERERE1eiyIiIiIqNFjQURERESNHgsiIiIiavT+HwhL/SSGGmC3AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "wcss=[]\n",
    "for i in range(1,10):\n",
    "    kmeans=KMeans(n_clusters=i,init='k-means++',)\n",
    "    kmeans.fit(X)\n",
    "    wcss.append(kmeans.inertia_)\n",
    "    \n",
    "plt.plot(range(1,10),wcss)\n",
    "plt.title('Elbow Method')\n",
    "plt.xlabel('No. of cluster')\n",
    "plt.ylabel('wcss: sum of dist. of sample to their closest cluster center' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "06b44b5b-5b72-41fe-a498-55c4779fcb5b",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cluster import KMeans"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "c183cb4d-8dfa-46be-8c18-3b230a646b3b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-51 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-51 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-51 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-51 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-51 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-51 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-51 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-51 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-51 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-51 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-51 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-51 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-51 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-51 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-51 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-51 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-51 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-51 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-51 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-51\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=3)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-51\" type=\"checkbox\" checked><label for=\"sk-estimator-id-51\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=3)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=3)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "kmeans = KMeans(n_clusters=3)\n",
    "kmeans.fit(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "a459469b-a3bb-4582-a584-6c9bb426a1c4",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "f:\\anaconda3\\Lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1446: UserWarning: KMeans is known to have a memory leak on Windows with MKL, when there are less chunks than available threads. You can avoid it by setting the environment variable OMP_NUM_THREADS=1.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-52 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-52 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-52 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-52 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-52 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-52 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-52 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-52 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-52 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-52 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-52 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-52 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-52 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-52 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-52 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-52 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-52 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-52 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-52 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-52\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KMeans(n_clusters=3)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-52\" type=\"checkbox\" checked><label for=\"sk-estimator-id-52\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;KMeans<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.cluster.KMeans.html\">?<span>Documentation for KMeans</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KMeans(n_clusters=3)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "KMeans(n_clusters=3)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "kmeans_1=KMeans(n_clusters=3)\n",
    "kmeans_1.fit(X)\n",
    "cluster_pred=kmeans_1.predict(X)\n",
    "cluster_pred_2=kmeans_1.labels_\n",
    "cluster_center=kmeans_1.cluster_centers_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "c39110c2-4756-4247-aac7-18ec19878eac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.04083933,  1.74320866],\n",
       "       [-2.73771147, -1.16476397],\n",
       "       [ 2.28888211, -0.95994724]])"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cluster_center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "adaa0cae-f92f-4827-8f46-a8a075a2be12",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
       "       2, 2])"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#使用predict方法对指定的数据集X进行预测\n",
    "cluster_label = kmeans.predict(X) \n",
    "cluster_label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "05ffbbc0-dc44-4d5d-a2a0-7d1bdf75d978",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 480x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "# 定义了一个更美观误分类矩阵的函数\n",
    "def show_confusion_matrix(cnf_matrix, class_labels):\n",
    "    plt.matshow(cnf_matrix, cmap=plt.cm.YlGn, alpha=0.7)\n",
    "    ax = plt.gca()\n",
    "    ax.set_xlabel('Predicted Label', fontsize=16)\n",
    "    ax.set_xticks(range(0,len(class_labels)))\n",
    "    ax.set_xticklabels(class_labels,rotation=45)\n",
    "    ax.set_ylabel('Actual Label', fontsize=16, rotation=90)\n",
    "    ax.set_yticks(range(0,len(class_labels)))\n",
    "    ax.set_yticklabels(class_labels)\n",
    "    ax.xaxis.set_label_position('top')\n",
    "    ax.xaxis.tick_top()\n",
    "\n",
    "    for row in range(len(cnf_matrix)):\n",
    "        for col in range(len(cnf_matrix[row])):\n",
    "            ax.text(col, row, cnf_matrix[row][col], va='center', ha='center', fontsize=16)\n",
    "\n",
    "# 误分类矩阵\n",
    "class_labels = [0,1,2,3]\n",
    "cnf_matrix = confusion_matrix(y_label,cluster_label) #cluster_label是聚类结果，y_lab是真实的类标签\n",
    "show_confusion_matrix(cnf_matrix, class_labels)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "d9e4cbdc-2101-446f-9d2b-272117771b5d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.04083933,  1.74320866],\n",
       "       [-2.73771147, -1.16476397],\n",
       "       [ 2.28888211, -0.95994724]])"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cluster_center"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "3dd69877-d388-4d94-9fd2-68ebcca95b8d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1000x800 with 0 Axes>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1646f2f2060>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1646f27d910>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1646f19a600>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x1646f33e660>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Clusters of customers')"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Monthly Income -standard')"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Spending Score (1-100)-standard')"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1646f2f0a70>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0wAAAK7CAYAAADBfQ+iAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAADU50lEQVR4nOzde1xUZf4H8M8Z5DIIgqDmBZOrpeUtTVerLTMls+1GZWUrudV2ExIryy6ubVtmbcal7b6rWFvWBrUVFvazrKw0L2EX3UIuGqYZ4CDIqAjn98fjIHfOdebMzOfda14TZ87lOczgnO95nuf7lWRZlkFERERERETt2DzdACIiIiIiIqtiwERERERERNQJBkxERERERESdYMBERERERETUCQZMREREREREnWDARERERERE1AkGTERERERERJ1gwERERERERNQJBkxERERERESdYMBERGRB3377LebMmYO4uDiEhIQgLCwMZ5xxBp544glUV1c3r3feeefhvPPOM60dzz77LFasWGHa/s1WXV2Na665Bv369YMkSbjssss83aRmX375JRYvXgyHw+HpphARURd6eLoBRETU2ksvvYTbb78dp5xyCu655x4MHz4cDQ0N2Lx5M55//nl89dVXePvtt93SlmeffRZ9+vTBDTfc4JbjGe2RRx7B22+/jX/9619ISEhAVFSUp5vU7Msvv8TDDz+MG264AZGRkZ5uDhERdYIBExGRhXz11Ve47bbbMHXqVLzzzjsIDg5ufm3q1Km466678OGHH3qwhfrJsozDhw/Dbrebfqzvv/8eCQkJmDVrlunH8jcNDQ2QJAk9evBSgoh8G4fkERFZyGOPPQZJkvDiiy+2CpZcgoKCcMkll3S6/bp16yBJEtatW9dqeXl5OSRJajW8rrS0FNdccw0GDhyI4OBgnHTSSZgyZQqKiooAALGxsfjhhx/w6aefQpIkSJKE2NjY5u0PHjyIu+++G3FxcQgKCsKgQYMwb948HDp0qNWxJUnC3Llz8fzzz2PYsGEIDg5Gbm4uAOC5557DqFGjEBYWhvDwcJx66qm4//77u/09VVdX4/bbb8egQYMQFBSE+Ph4PPDAAzhy5Eir8/2///s/7Nixo7n9bX8vbb322muYOHEiwsLCEBYWhtGjR+Of//xn8+uxsbEd9ra1HRrZ1NSEv/3tbzjllFNgt9sRGRmJkSNHIisrCwCwePFi3HPPPQCAuLi4du1ramrCE088gVNPPRXBwcHo168fZs+ejYqKinbHPf300/HVV19h0qRJsNvtiI2NxfLlywEABQUFOOOMMxAaGooRI0Z0GGwXFxfjuuuuQ79+/RAcHIxhw4bhH//4R6t1XJ+rV155BXfddRcGDRqE4OBg7Ny5E/X19c2fg5CQEERFRWHcuHF4/fXXu/xdExF5C94WIiKyiMbGRnz88ccYO3YsBg8ebPrxLrroIjQ2NuKJJ57AySefjMrKSnz55ZfNc2refvttXHnllYiIiMCzzz4LAM1BXH19Pc4991xUVFTg/vvvx8iRI/HDDz9g0aJF+O677/B///d/kCSp+VjvvPMOPv/8cyxatAj9+/dHv379sGrVKtx+++1IS0vD3//+d9hsNuzcuRPbt2/vst2HDx/G5MmTUVJSgocffhgjR47E559/jiVLlqCoqAgFBQUYMGAAvvrqK9x+++2oqanBv//9bwDA8OHDO93vokWL8Mgjj+CKK67AXXfdhYiICHz//ffYtWuX6t/tE088gcWLF+PBBx/E73//ezQ0NOB///tf8+/2pptuQnV1NXJycpCfn48BAwa0at9tt92GF198EXPnzsXFF1+M8vJyPPTQQ1i3bh22bt2KPn36NB9r3759mDNnDhYsWICYmBjk5OTgT3/6E37++We89dZbuP/++xEREYG//vWvuOyyy1BaWoqBAwcCALZv345Jkybh5JNPxlNPPYX+/fujsLAQ6enpqKysxF/+8pdW57Vw4UJMnDgRzz//PGw2G/r164f58+fjlVdewd/+9jeMGTMGhw4dwvfff4+qqirVvzciIkuSiYjIEvbt2ycDkK+55hrF25x77rnyueee2/zzJ598IgOQP/nkk1brlZWVyQDk5cuXy7Isy5WVlTIAOTMzs8v9n3baaa3277JkyRLZZrPJmzZtarX8rbfekgHIq1evbl4GQI6IiJCrq6tbrTt37lw5MjKy+5Ns4/nnn5cByG+++War5UuXLpUByGvWrGledu6558qnnXZat/ssLS2VAwIC5FmzZnW53pAhQ+TU1NR2y9u+DxdffLE8evToLvf15JNPygDksrKyVst37NghA5Bvv/32Vss3btwoA5Dvv//+VscFIG/evLl5WVVVlRwQECDb7XZ5z549zcuLiopkAHJ2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8cft3oennnpKnjRpktynTx85KChIPvnkk+Ubb7xRLi8vb3W8hQsXygMHDpRtNlur7IaNjY3y0qVL5aFDh8qBgYFynz595Ouvv17++eefFZ3fkCFD5BkzZrRb3tF7UVZWJv/pT3+SBw0aJAcGBsp9+/aVJ02aJP/tb39rXseVJe8///lPu33ed9998rhx4+TevXvLwcHBcnx8vJyRkSFXVlZ2+nsmIvImkiy3GQROREREREREADiHiYiIiIiIqFMMmIiIiIiIiDrBgImIiIiIiKgTDJiIiIiIiIg6wYCJiIiIiIioEwyYiIiIiIiIOuFXhWubmprwyy+/IDw8HJIkebo5RERERETkIbIso7a2FgMHDoTN1nk/kl8FTL/88gsGDx7s6WYQEREREZFF/Pzzz4iJien0db8KmMLDwwGIX0qvXr083BoiIiIiIvKUgwcPYvDgwc0xQmf8KmByDcPr1asXAyYiIiIiIup2qg6TPhAREREREXWCARMREREREVEnGDARERERERF1wq/mMBERERERdUeWZRw7dgyNjY2ebgrpEBAQgB49euguJ8SAiYiIiIjouKNHj2Lv3r2or6/3dFPIAKGhoRgwYACCgoI074MBExERERERgKamJpSVlSEgIAADBw5EUFCQ7t4J8gxZlnH06FH89ttvKCsrQ1JSUpfFabvCgImIiIiICKJ3qampCYMHD0ZoaKinm0M62e12BAYGYteuXTh69ChCQkI07YdJH4iIiIiIWtDaE0HWY8R7yU8DERERERFRJzgkj4iIiIjIaLIMVFUBdXVAWBgQHQ1wPpRXYg8TEREREZFRHA4gKwtISgL69gXi4sRzUpJY7nC4vUnl5eWQJAlFRUVuP7Yv8NqAacmSJZAkCfPmzfN0U4iIiIiIgMJCICYGyMgASktbv1ZaKpbHxIj1vNiKFSsQGRlp6jHuvPNOjB07FsHBwRg9erSpx+qOVwZMmzZtwosvvoiRI0d6uilERERERCIImjEDcDrFcDxZbv26a5nTKdbz8qDJCI2NjWhqaurwNVmW8ac//QkzZ850c6va87qAqa6uDrNmzcJLL72E3r17e7o5REREROTvHA4gJUUERJ0EAM2amsR6KSmGDs9ramrC0qVLkZiYiODgYJx88sl49NFHO1y3ox6id955p1XNqW3btmHy5MkIDw9Hr169MHbsWGze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XMHS1KlTMX/+fOzbtw/79u3Db7/9pvl3pAcDJiIiIiIijSRJJG7QIj3duCoCDz30EO666y4sWrQIw4YNw8yZM7F///4O142KisKrr76K1atXY8SIEXj99debU4MDQEBAAKqqqjB79mwMHToUV199NaZPn46HH34YADBp0iTceuutmDlzJvr27YsnnngCALB8+XLMnj0bd911F0455RRccskl2LhxIwYPHqzqXP7zn//gt99+w7///W8MGDCg+XHmmWdq++XoJMltBzD6sIMHDyIiIgI1NTXo1auXp5tDRERERBZy+PBhlJWVIS4uDiEhIYq3cziAmBhRlLa7OkwAYLMBdjtQUSHqV5N5unpPlcYG7GEiIiIiItIhMhLIyxO9RbZurq5tNrFefj6DJW/BgImIiIiISKfkZKCgQPQcSVL7oXauZXY7sHo1MG2aZ9pJ6jFgIiIiIiIyQHKyGGaXmQnEx7d+LT5eLN+zh8GSt2EdJiIiIiIig0RGimQOaWmiKG1trUgdHhVlXIIHci8GTEREREREBpMkkXJcb1Fa8jwOySMiIiIiIuoEAyYiIiIiIqJOcEgeEREREZHBZFlGlbMKdUfrEBYUhmh7NCROYvJKDJiIiIiIiAziOOxAblEucr7OQcmBkublCb0TkDY+DamjUxEZEum5BpJqHJJHRERERGSAwp2FiFkWg4zCDJQeKG31WumBUmQUZiBmWQwKdxa6tV3l5eWQJAlFRUVuPa6vYMBERERERKRT4c5CzHhtBpwNTsjH/2vJtczZ4MSM12a4PWgy0ooVKxAZGWna/quqqnDhhRdi4MCBCA4OxuDBgzF37lwcPHjQtGN2hQETERGRL5NloLISKC8Xz7Lc7SZEpI7jsAMpb6ZAlmU0oanLdZvQBFmWkfJmChyHHe5poEU1Njaiqan978tms+HSSy/Fu+++i59++gkrVqzA//3f/+HWW2/1QCsZMBEREfkmhwPIygKSkoC+fYG4OPGclCSWOxyebiGRz8gtykV9Q323wZJLE5pQ31CPldtWGtaGpqYmLF26FImJiQgODsbJJ5+MRx99tMN1O+oheuedd1olpdi2bRsmT56M8PBw9OrVC2PHjsXmzZuxbt06zJkzBzU1NZAkCZIkYfHixQCAo0ePYsGCBRg0aBB69uyJCRMmYN26de2O+/7772P48OEIDg7Grl27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D4bclq0ITBls+/bt2r9//+jnu3btks/n0y9/+UstWrRIpaWlNo4O2Wjnzp1avHixTj31VN133328CCNlFi1apFNPPVX33HPP6LHjjjtOF1xwAUUfkFKmaaqurk6/+tWv9Pjjj6uystLuISGL9fX16fXXXw859tnPflb/+I//qBtuuIGlou9iD1MGmzt3bsjneXl5kiSv10tYQsrt2rVL5513nubOnavvf//72rNnz+ht73//+20cGbLBihUrdPnll+u0007TGWecoXvvvVfbt2/X1VdfbffQkGWuueYaPfDAA3r44YeVn58/uo+uoKBAbrfb5tEh2+Tn5x8WimbMmKGSkhLC0hgEJgAp8eijj2rr1q3aunXrYYGdiW4k27Jly9TT06PvfOc72r17t+bPn6/169fr6KOPtntoyDLB0vbnnXdeyPFVq1Zp+fLlqR8QgEmxJA8AAAAAwmC3NQAAAACEQWACAAAAgDAITAAAAAAQBoEJAAAAAMIgMAEAAABAGAQmAAAAAAiDwAQAAAAAYRCYAAAAACAMAhMAYFyGYejXv/512Nsff/xxGYahQCCQsjEhcZYvX64LL7ww7e4bAFKNwAQADrJ8+XIZhqGrr776sNu+9KUvyTAMLV++PKGPecstt2jBggUJvc9I8cb6PXb+OwAAwiMwAYDDzJkzRw8++KAGBwdHjx04cEC/+MUvNHfuXBtHBoQaHh62ewgAkHQEJgBwmFNOOUVz585Ve3v76LH29nbNmTNHJ598csi5Bw8eVH19vd73vvcpNzdXZ511lp555pnR24PL5v7whz/otNNOk8fj0Yc+9CG9+uqrkqTVq1fr29/+tl544QUZhiHDMLR69erR67u7u3XRRRfJ4/GosrJSv/nNb8Yd81tvvaWZM2fql7/8ZcjxRx55RDNmzFBfX19EX/t5552n+vp6XX/99SouLtb73/9+3XLLLSHnBAIBXXXVVZo9e7Zyc3M1f/58/fa3vx29va2tTccff7ymT5+usrIy3XXXXSHXl5WV6dZbb1VNTY3y8vJ09NFH6+GHH9aePXt0wQUXKC8vTyeccII2bdoUct2TTz6pc845R263W3PmzFF9fb3eeuutiL6uoMcff1wLFy7UjBkzVFhYqDPPPFOvv/76hP8OK1eu1AknnKAZM2Zozpw5+tKXvqT+/v7R+1y9erUKCwvl9/t17LHHKi8vT0uXLtXu3btHz3nnnXe0YsUKFRYWqqSkRNdff71M0wwZ23/913/prLPOGj3n4x//uDo6OkZv7+rqkmEYWrt2rc477zzl5ubqvvvui+i+ASCdEZgAwIE++9nPatWqVaOf/+xnP9MVV1xx2HnXX3+92tra1Nraqueee07z5s2Tz+dTb29vyHnf+MY3dNddd2nTpk2aOnXq6H0tW7ZMX/3qV3X88cdr9+7d2r17t5YtWzZ63be//W1dfPHFevHFF/Wxj31Ml1566WH3LUkzZszQZz7zmZAxS9KqVav0qU99Svn5+RF/7a2trZoxY4Y2btyoO+64Q9/5znf0+9//XpI0MjKij370o3ryySd133336f/+7/90++23a8qUKZKkZ599VhdffLE+85nP6K9//atuueUWffOb3wwJgZJ0991368wzz9Tzzz+vqqoqXX755aqpqdFll102+jzW1NSMvvH/61//Kp/Pp09+8pN68cUX9dBDD+kvf/mLvvzlL0f8db399tu68MILde655+rFF1/UU089pauuukqGYUz47+ByudTc3Kz//d//VWtrq/74xz/q+uuvD7nvgYEBff/739fPf/5z/elPf9L27dv1L//yL6O333XXXfrZz36mn/70p/rLX/6i3t5e/epXvwq5j7feeksrVqzQM888oz/84Q9yuVy66KKLNDIyEnLeDTfcoPr6er388svy+XwR3TcApDUTAOAYtbW15gUXXGDu2bPHnD59urlt2zazq6vLzM3NNffs2WNecMEFZm1trWmaptnf32/m5OSY999//+j1Q0ND5lFHHWXecccdpmma5mOPPWZKMv/7v/979Jx169aZkszBwUHTNE3z5ptvNk866aTDxiLJvOmmm0Y/7+/vNw3DMH/3u9+F3PfevXtN0zTNjRs3mlOmTDF37txpmqZp7tmzx8zJyTEff/zxSb/eoHPPPdc866yzQs45/fTTzRtuuME0TdP0+/2my+UyX3311XHv75JLLjE/8pGPhBy77rrrzOOOO27086OPPtq87LLLRj/fvXu3Kcn85je/OXrsqaeeMiWZu3fvNk3TNC+//HLzqquuCrnfP//5z6bL5Rp9HifT09NjSgr7fIT7dzjU2rVrzZKSktHPV61aZUoyt27dOnrsBz/4gTl79uzRz4888kjz9ttvH/18eHjYLC0tDXnuD/X3v//dlGT+9a9/NU3TNLdt22ZKMhsbG0POi+W+ASCdMMMEAA50xBFHqKqqSq2trVq1apWqqqp0xBFHhJzT0dGh4eFhnXnmmaPHcnJytHDhQr388ssh55544omj/33kkUdKkv7+979POo6x182YMUP5+flhr1u4cKGOP/54rVmzRpL085//XHPnztU555wz6eOEe8zgeIOPuXnzZpWWluqYY44Z99qXX3455PmQpDPPPFNbtmzRO++8M+5jzJ49W5J0wgknHHYs+LjPPvusVq9erby8vNG/Pp9PIyMj2rZt22Hj2L59e8i53/ve91RcXKzly5fL5/Pp/PPPV1NTU8iyuXAee+wxfeQjH9EHPvAB5efnq6amRj09PSHLAT0ej7xe77jP2b59+7R7926dccYZo7dPnTpVp512WsjjdHR06JJLLlFFRYVmzpyp8vLy0a9lrLHXRXrfAJDOCEwA4FBXXHGFVq9erdbW1nGX45nvLhczDOOw44cey8nJGf3v4G2HLrUaz9jrgtdOdN3nPve50WV5q1at0mc/+9nDxhLPY7rd7gmvHe9rN8fZTzPe8zHRczQyMqIvfOEL2rx58+jfF154QVu2bAkJKkFHHXVUyLnBqoerVq3SU089pQ996EN66KGHdMwxx2jDhg1hv57XX39dH/vYxzR//ny1tbXp2Wef1Q9+8ANJoQUXxnvOxvu6J3L++eerp6dHP/nJT7Rx40Zt3LhRkjQ0NBRy3owZM6K6XwBIdwQmAHCopUuXamhoSENDQ/L5fIfdPm/ePE2bNk1/+ctfRo8NDw9r06ZNOvbYYyN+nGnTpoXMvsTjsssu0/bt29Xc3KyXXnpJtbW1CbnfoBNPPFE7duzQa6+9Nu7txx13XMjzIVnFGo455pjRfU6xOOWUU/TSSy9p3rx5h/2dNm3aYedPnTo15Jzi4uLR204++WTdeOONevLJJzV//nw98MADksb/d9i0aZPefvtt3XXXXfrgBz+oY445Rrt27Ypq7AUFBTryyCNDgtnbb7+tZ599dvTznp4evfzyy7rpppv04Q9/WMcee6z27t2bkPsGgHQ31e4BAADGN2XKlNGldeO92Z8xY4a++MUv6rrrrlNxcbHmzp2rO+64QwMDA7ryyisjfpyysjJt27ZtdLlbfn6+pk+fHtOYi4qK9MlPflLXXXedlixZotLS0pjuJ5xzzz1X55xzjqqrq7Vy5UrNmzdPr7zyigzD0NKlS/XVr35Vp59+uv71X/9Vy5Yt01NPPaV///d/1z333BPX495www364Ac/qGuuuUaf//znNWPGDL388sv6/e9/r5aWlojuY9u2bbr33nv1iU98QkcddZReffVVvfbaa6qpqZE0/r+D1+vV22+/rZaWFp1//vn6n//5H/3oRz+KevzXXnutbr/9dlVWVurYY4/VypUrQxoOFxUVqaSkRPfee6+OPPJIbd++XV/72tcSct8AkO6YYQIAB5s5c6ZmzpwZ9vbbb79d1dXVuvzyy3XKKado69at8vv9KioqivgxqqurtXTpUi1evFizZs3SL37xi7jGfOWVV2poaGjcZYSJ0NbWptNPP13//M//rOOOO07XX3/96MzMKaecorVr1+rBBx/U/Pnz9a1vfUvf+c534m72e+KJJ+qJJ57Qli1bdPbZZ+vkk0/WN7/5zdH9YJHweDx65ZVXVF1drWOOOUZXXXWVvvzlL+sLX/iCpPH/HRYsWKCVK1fq3/7t3zR//nzdf//9uu2226Ie/1e/+lXV1NRo+fLlOuOMM5Sfn6+LLrpo9HaXy6UHH3xQzz77rObPn6+GhgbdeeedCblvAEh3hhntImcAACZw//3369prr9WuXbvGXa4GAEA6YUkeACAhBgYGtG3bNt122236whe+QFgCAGQEluQBABLijjvu0IIFCzR79mzdeOONdg8HAICEYEkeAAAAAITBDBMAAAAAhEFgAgAAAIAwCEwAAAAAEAaBCQAAAADCIDABAAAAQBgEJgAAAAAIg8AEAAAAAGEQmAAAAAAgjP8PSyhkujG6xXQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,8))\n",
    "plt.scatter(X[cluster_pred==0,0],X[cluster_pred==0,1], s = 100, c = 'red', label ='cluster 1' )\n",
    "plt.scatter(X[cluster_pred==1,0],X[cluster_pred==1,1], s = 100, c = 'blue', label ='cluster 2' )\n",
    "plt.scatter(X[cluster_pred==2,0],X[cluster_pred==2,1], s = 100, c = 'green', label ='cluster 3' )\n",
    "#plt.scatter(X[cluster_pred==3,0],X[cluster_pred==3,1], s = 100, c = 'cyan', label = 'cluster 4')\n",
    "#plt.scatter(X[cluster_pred==4,0],X[cluster_pred==4,1], s = 100, c = 'magenta', label = 'cluster 5')\n",
    "plt.scatter(cluster_center[:,0],cluster_center[:,1], s = 300, c = 'yellow', label = 'Centroids')\n",
    "plt.title('Clusters of customers')\n",
    "plt.xlabel('Monthly Income -standard')\n",
    "plt.ylabel('Spending Score (1-100)-standard')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "427f953f-0ce3-493c-9d38-cd7728d77cd7",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "21d7651a-f3e2-4f18-a4ef-7844859f080c",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
